package ue.a2.b;
/*
 * author: Stefan Schasse 569372
 */

/****************************************************************************
 * Aufgabe B (Schleifen, Simulation) [10 Punkte]:
 *
 * "DoubleMoon“
 * In einem anderen Sonnensystem gibt es einen Planeten „E“ der sich genau wie die Erde verhält.
 * Tage, Monate, (Schalt-)Jahre verhalten sich wie bei uns, die Kalender sind identisch.
 * Allerdings ist der Mond schon etwas schneller und benötigt exakt 29 Tage für einen Umlauf.
 * Am 1. Januar 2013 sei dort Vollmond. Schreiben Sie ein Programm DoubleMoon.java,
 * das entsprechend einem Kommandozeilenparameter N die ersten N Monate (in jeweils einer Zeile) ausgibt,
 * in denen es 2-mal Vollmond gibt. Das Format für die Ausgabe ist:
 * YYYY, Monat
 * …
 * Die Jahreszahl wird 4-stellig angegeben, gültige Monatsnamen sind: Januar, Februar, Maerz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember.
 *
 * Achtung: Die abgegebene Java-Datei darf keine Imports (z.B. "import java.util.Calendar;") enthalten!
 * Abgabedatei in Moodle: DoubleMoon.java
 * Aufruf & Ausgabe:
 * $ java DoubleMoon 2
 * 2013, Januar
 * 2014, Maerz
 ******************************************************************************/
public class DoubleMoon {

	public static void main(String[] args) {
		// argumentübernahme
		int N = Integer.parseInt(args[0]);

		// mondvariablenm start am 1.1.2013
		int vnow[] = {1,1,2013};
		int vnext[] = {1,1,2013};
		// benennung indizes
		int Tag = 0;
		int Monat = 1;
		int Jahr = 2;

		// Felddefinitionen
		String Monatsname[]={"Januar","Februar","Maerz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"};
		int Monatslaenge[]={31,28,31,30,31,30,31,31,30,31,30,31};

		// Durchläufe
		for (int i=0 ; i<N ; i=i+1) {

			// Suche nach Doppelmond
			/*
			 *  v2 wird um 29 tage vorgerechnet, das datum korrigiert und dann geprüft ob der monat immernoch
			 *  dem von v1 entspricht.
			 *  wenn nein, wird v1 auf  v2 gesetzt und der nächste vollmondtermin v2 wird erstellt
			 *  wenn ja, wird das datum ausgegeben, v1 auf v2 gesetzt und der nächste vollmondtermin v2 gesucht
			 *
			 */

			while ((vnow[Tag]==vnext[Tag]) && (vnow[Monat]==vnext[Monat]) && (vnow[Jahr]==vnext[Jahr])) {
				// Tage+29
				vnext[Tag] = vnext[Tag]+29;

				//System.out.println(i+" 1 V1("+vnow[Tag]+"."+vnow[Monat]+"."+vnow[Jahr]+") V2("+vnext[Tag]+"."+vnext[Monat]+"."+vnext[Jahr]+")");


				// Datumskorrektur
				// Test auf Monatsüberlauf

				/// Schalttagesberechnung
				//// Wieviele Tage im Monat?
				int tim = Monatslaenge[vnext[Monat]-1];
				//// Februar im Schaltjahr?
				if ((vnext[Monat] == 2) && (((vnext[Jahr]%4) == 0) && (((vnext[Jahr]%100) != 0) || ((vnext[Jahr]%400) == 0)))) {
					// Schalttag berücksichtigen
					tim = tim+1;
				}

				/// Monatsüberlauf?
				if (vnext[Tag] > tim) {
					// Tage zurücksetzen
					vnext[Tag] = vnext[Tag]-tim;
					// Monat++
					vnext[Monat] = vnext[Monat]+1;

					// Test auf Jahresüberlauf
					if (vnext[Monat] > 12) {
						// Monat zurücksetzen
						vnext[Monat] = vnext[Monat]-12;
						// Jahr++
						vnext[Jahr] = vnext[Jahr]+1;
					}
				}

				//System.out.println(i+" 2 V1("+vnow[Tag]+"."+vnow[Monat]+"."+vnow[Jahr]+") V2("+vnext[Tag]+"."+vnext[Monat]+"."+vnext[Jahr]+")");

				// wenn der folgevollmond v2 nicht im gleichen monat wie der alte vollmond v1  liegt: weitersuchen
				if (vnow[Monat] != vnext[Monat]) {
					vnow[Tag] = vnext[Tag];
					vnow[Monat] = vnext[Monat];
					vnow[Jahr] = vnext[Jahr];
				}

				//System.out.println(i+" 3 V1("+vnow[Tag]+"."+vnow[Monat]+"."+vnow[Jahr]+") V2("+vnext[Tag]+"."+vnext[Monat]+"."+vnext[Jahr]+")");

			}

			// System.out.println(i+" 4 V1("+vnow[Tag]+"."+vnow[Monat]+"."+vnow[Jahr]+") V2("+vnext[Tag]+"."+vnext[Monat]+"."+vnext[Jahr]+")");

			// Ausgabe Präzise
			//System.out.println(vnext[Tag]+"."+vnext[Monat]+"."+vnext[Jahr]);

			// Ausgabe Pflicht
			System.out.println(vnext[Jahr]+", "+Monatsname[vnext[Monat]-1]);

			// nächsten vollmond suchen und weiter in der i to N schleife
			vnow[Tag] = vnext[Tag];
			vnow[Monat] = vnext[Monat];
			vnow[Jahr] = vnext[Jahr];
		}

	}
}

